/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.flexengine.view;

import com.flexengine.component.GameComponent;
import com.flexengine.cursor.GameCursor;
import com.flexengine.engine.Renderable;
import com.flexengine.math.Form2D;
import com.flexengine.math.Form3D;
import java.awt.Color;
import java.awt.Composite;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Paint;
import java.awt.Polygon;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.Stroke;
import java.awt.font.FontRenderContext;
import java.awt.geom.AffineTransform;
import java.text.AttributedCharacterIterator;
import java.util.Map;

/**
 * @author Luann R. Athayde
 * @version 1.0
 * @since 1.0
 */
public abstract class Graphics {
    
    public abstract Graphics create();
    public abstract void     dispose();

    public abstract void translate(int x, int y);

    public abstract Color getColor();

    public abstract void setColor(Color c);

    public abstract Font getFont();

    public abstract void setFont(Font font);

    public abstract FontMetrics getFontMetrics(Font f);

    public abstract Rectangle getClipBounds();

    public abstract void clipRect(int x, int y, int width, int height);

    public abstract void copyArea(int x, int y, int width, int height, int dx, int dy);

    public abstract void drawLine(int x1, int y1, int x2, int y2);

    public abstract void fillRect(int x, int y, int width, int height);

    public abstract void clearRect(int x, int y, int width, int height);

    public abstract void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight);

    public abstract void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight);

    public abstract void drawOval(int x, int y, int width, int height);

    public abstract void fillOval(int x, int y, int width, int height);

    public abstract void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle);

    public abstract void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle);

    public abstract void drawPolyline(int[] xPoints, int[] yPoints, int nPoints);

    public abstract void drawPolygon(int[] xPoints, int[] yPoints, int nPoints);

    public abstract void fillPolygon(int[] xPoints, int[] yPoints, int nPoints);

    public abstract void drawString(String str, int x, int y);

    public abstract void drawString(AttributedCharacterIterator iterator, int x, int y);

    public abstract void setComposite(Composite comp);

    public abstract void setPaint(Paint paint);

    public abstract void setStroke(Stroke s);

    public abstract void setRenderingHint(RenderingHints.Key hintKey, Object hintValue);

    public abstract Object getRenderingHint(RenderingHints.Key hintKey);

    public abstract void setRenderingHints(Map<?, ?> hints);
    
    public abstract void drawRect(int x, int y, int width, int height);

    public abstract void addRenderingHints(Map<?, ?> hints);

    public abstract RenderingHints getRenderingHints();

    public abstract void translate(double tx, double ty);

    public abstract void rotate(double theta);

    public abstract void rotate(double theta, double x, double y);

    public abstract void scale(double sx, double sy);

    public abstract void shear(double shx, double shy);

    public abstract void transform(AffineTransform Tx);

    public abstract void setTransform(AffineTransform Tx);

    public abstract AffineTransform getTransform();

    public abstract Paint getPaint();

    public abstract Composite getComposite();

    public abstract void setBackground(Color color);

    public abstract Color getBackground();

    public abstract Stroke getStroke();

    public abstract void clip(Shape s);

    public abstract FontRenderContext getFontRenderContext();
    
    // -------------------------------------------------------------------------
    // -- Generals FlexEngine methods...
    public abstract void clear();
    public abstract void clear(Color color);
    
    // -------------------------------------------------------------------------
    // -- Generals FlexEngine objects...
    public abstract void draw(GameCursor gCursor);
    public abstract void draw(Texture texture, int x, int y);
    public abstract void draw(Sprite sprite, int x, int y);
    public abstract void draw(GameComponent gameComponent, int x, int y);
    public abstract void draw(Renderable obj);
    public abstract void draw(Renderable obj, int x, int y);
    public abstract void draw(Form2D form);
    public abstract void draw(Form3D form);
    public abstract void fill(Form2D form);
    public abstract void fill(Form3D form);
    // -------------------------------------------------------------------------
    abstract void update();

    public abstract void fillPolygon(Polygon polygon);
    public abstract void drawPolygon(Polygon polygon);
    public abstract void draw(Shape s);
    
}
